#include <stdio.h>
#include <stdlib.h>
#include "global.h"

/*
 *打印各种出错信息
 */
void err_quit(int err_flag,...){
    va_list ap;
    switch(err_flag) {
        case NO_FMAKEFILE:    //找不到fmakefile
            printf("fmake:*** 没有明确指定目标并且找不到fmakefile.停止.\n");
            break;
        case OPEN_FAILED:     //打开文件失败
            printf("错误:打开文件失败.停止.\n");
            break;
        case NO_ELINE:        //读取文件错误
            printf("错误:没有明确指定生成目标.\n");
            break;
        case MORE_ELINE:      //读取文件错误
            printf("错误:指定生成目标多余一个,无法生成.\n");
            break;
        case STAT_ERR:        //获取文件信息错误
            printf("错误:获取文件时间发生错误.\n");
            break;
        case UNKNOWN_TOKEN:   //出现无法识别的符号
            va_start(ap,err_flag);
            int lnum = va_arg(ap,int);
            char c = (char)va_arg(ap,int);
            va_end(ap);
            printf("错误:第%d行无法识别开始记号\"%c\".\n",lnum,c);
            break;
        case BAD_FORMAT:      //开始标记后没有空白，格式错误
            va_start(ap,err_flag);
            int lcnt = va_arg(ap,int);
            va_end(ap);
            printf("错误:第%d行格式错误，行开始记号之后未留空白\n",lcnt);
            break;
        case SYS_FAULT:      //执行system过程发生错误
            va_start(ap,err_flag);
            int flag = va_arg(ap,int);
            va_end(ap);
            printf("错误:%s过程发生错误,请检查fmakefile文件!\n",flag? "链接生成":"编译");
            break;
    }
    exit(1);
}
